<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

  <script>
    const data = [
      { id: "01", name: "张大大", pid: "", job: "项目经理" },
      { id: "02", name: "小亮", pid: "01", job: "产品leader" }
    ]

    /**
     * list 是需要遍历的扁平数组
     * rootValue 顶级节点
     * */
    function arrToTree(list, rootValue) {
      // 最终需要返回的树行结构数据
      const treeData = []

      // 开始对 list 扁平数据进行遍历
      list.forEach(item => {
        // 先查找最顶级，从最顶级往下进行查找
        if (item.pid === rootValue) {
          // 查找子级：需要和扁平数组中的每一项进行对比
          // 子级的 pid 等于 父级 的 id
          const children = arrToTree(list, item.id)

          // 查看 children 是否有子级
          if (children.length) {
            item.children = children
          }

          treeData.push(item)
        }
      })

      return treeData
    }

    // 目标：
    const treeData = arrToTree(data, '')
    console.log(treeData)

  </script>
</body>

</html>